package u12.strategy.ej1;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Calendar;


public class StrategyFactory {
	private static StrategyFactory strategyFactory;
	private ISaludoStrategy fsaludo;
	
	private StrategyFactory(){
		
	}
	
	public ISaludoStrategy getSaludo(){
		//fsaludo=new SaludoCorrectoStrategy();
		if (fsaludo==null){
			cargarAdaptadorFichero();
			//cargarAdaptadorMinuto();
			
		}
		
		return fsaludo;
	}
	
	public static StrategyFactory getStrategyFactory(){
		if(strategyFactory==null){
			return new StrategyFactory();
		}
		return strategyFactory;
	}
	
	private void cargarAdaptadorFichero(){
		String nombreAdaptador=cargarTipoSaludo();
		//instropection  se usa para crear objetos de clases que vienen dadas por parametros
		try {
			fsaludo=(ISaludoStrategy)Class.forName(nombreAdaptador).newInstance();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	private void cargarAdaptadorMinuto(){
		int min=java.util.Calendar.getInstance().get(Calendar.MINUTE);
		if(min%2==0){
			fsaludo=new SaludoCorrectoStrategy();
		}else{
			fsaludo=new SaludoAmableStrategy();
		}
	}
	
	private String cargarTipoSaludo(){
		FileReader fr=null;
		BufferedReader br=null;
		String linea="";
		try {
			fr=new FileReader("src/u12/strategy/ej1/dat/TipoSaludo.ini");
			br=new BufferedReader(fr);
			linea=br.readLine();
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			try {
				fr.close();
				
			}
			catch (Exception e) {
				e.printStackTrace();
			}
		}
		return linea;
	}
	
}
